﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.ApplicationModel;

namespace Anagramme.Contracts
{
    /// <summary>
    /// Informations sur le jeu
    /// </summary>
    [DataContract]
    public class GameInfo : ObservableObject
    {
        #region Fields
        private int _currentRound;
        private GameModes _gameMode;
        private bool _isPlaying;
        private int _maxWordsLength;
        private int _minWordsLength;
        private int _target;
        #endregion

        #region Properties
        /// <summary>
        /// Obtient ou définit de round actuel
        /// </summary>
        [DataMember]
        public int CurrentRound
        {
            get { return _currentRound; }
            set
            {
                if (!_currentRound.Equals(value))
                {
                    RaisePropertyChanging();
                    _currentRound = value;
                    RaisePropertyChanged();
                }
            }
        }

        /// <summary>
        /// Obtient ou définit le mode de jeu de la partie
        /// </summary>
        [DataMember]
        public GameModes GameMode
        {
            get { return _gameMode; }
            set
            {
                if (!_gameMode.Equals(value))
                {
                    RaisePropertyChanging();
                    _gameMode = value;
                    RaisePropertyChanged();
                }
            }
        }

        /// <summary>
        /// Obtient ou définit une valeur indiquant si le jeu est en cours
        /// </summary>
        /// <remarks>Vaut False uniquement lors du chargement du jeu par les différents joueurs</remarks>
        [DataMember]
        public bool IsPlaying
        {
            get { return _isPlaying; }
            set
            {
                if (!_isPlaying.Equals(value))
                {
                    RaisePropertyChanging();
                    _isPlaying = value;
                    RaisePropertyChanged();
                }
            }
        }
        
        /// <summary>
        /// Obtient ou définit la cible
        /// </summary>
        /// <remarks>Représente le score cible en cas de jeu en score ou le nombre de rounds en cas de jeu en rounds</remarks>
        [DataMember]
        public int Target
        {
            get { return _target; }
            set
            {
                if (!_target.Equals(value))
                {
                    RaisePropertyChanging();
                    _target = value;
                    RaisePropertyChanged();
                }
            }
        }
        #endregion
    }
}
